package domain

import (
	"encoding/base64"
	"strconv"
	"strings"
)

// URL的结构体 但不止URL 使用URL代指接口请求 也可能是RPC

/*
	功能：
		1. 将token AppID 时间戳拼接到URL 形成新的URL
		2. 解析URL 得到token AppID 时间戳等信息
 */
type ApiRequest struct {
	baseUrl string
	token []byte
	appId string
	timestamp int64
}

// 构造函数
func NewApiRequest(baseUrl,appId string,token []byte,timestamp int64)*ApiRequest{
	return &ApiRequest{
		baseUrl: baseUrl,
		token: token,
		appId: appId,
		timestamp: timestamp,
	}
}



// 函数

// 解析全路径 解析出各种信息 这是是简单解析 如果是http 可以直接使用请求的方法获取
func ParseFromFullUrl(url string)ApiRequest{
	// http://shouwuan.com?appId=111&timestamp=123&token=323123
	//解析Url
	split := strings.Split(url, "?")
	baseUrl := split[0]
	other := split[1]
	i := strings.Split(other, "&")
	appId := i[0]
	token := i[1]
	timestamp := i[2]
	appIdS := strings.TrimPrefix(appId, "appId=")
	timeS := strings.TrimPrefix(timestamp, "timestamp=")
	timestampI, _ := strconv.ParseInt(timeS, 10, 64)
	tokenS := strings.TrimPrefix(token, "token=")
	// 转换成[]byte
	tokenB, _ := base64.StdEncoding.DecodeString(tokenS)

	return ApiRequest{
		baseUrl:baseUrl,
		token:tokenB,
		appId: appIdS,
		timestamp: timestampI,
	}
}
// 拼接token AppId 时间戳生成完成URL
func (this *ApiRequest)CreateURL()string{
	url:=this.baseUrl+"?appId="+this.appId+"&token="+base64.StdEncoding.EncodeToString(this.token)+"&timestamp="+strconv.FormatInt(this.timestamp,10)
	return url
}

func (this *ApiRequest)GetBaseUrl()string{
	return this.baseUrl
}

func (this *ApiRequest)GetToken()[]byte{
	return this.token
}

func (this *ApiRequest)GetAppId()string{
	return this.appId
}

func (this *ApiRequest)GetTimestamp()int64{
	return this.timestamp
}








